home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Mail / EnhanceMail.1.3 / Source / SimpleString.m < prev    next >
Encoding:
Text File  |  1996-04-06  |  2.3 KB  |  132 lines

  1. /* -*-C-*-
  2. *******************************************************************************
  3. *
  4. * File:         SimpleString.m
  5. * RCS:          $Header: /usr/local/lib/cvs/EnhanceMail/SimpleString.m,v 1.1.1.3 1996/04/07 00:20:27 cedman Exp $
  6. * Description:  
  7. * Author:       Carl Edman
  8. * Created:      Tue Oct 17 23:45:45 1995
  9. * Modified:     Tue Apr  2 20:15:55 1996 (Carl Edman) cedman@capitalist.princeton.edu
  10. * Language:     C
  11. * Package:      N/A
  12. * Status:       Experimental (Do Not Distribute)
  13. *
  14. * (C) Copyright 1995, but otherwise this file is perfect freeware.
  15. *
  16. *******************************************************************************
  17. */
  18.  
  19. #import "SimpleString.h"
  20.  
  21. #define START 64
  22.  
  23. @implementation SimpleString
  24. - init
  25.    {
  26.    cur=data=malloc(START);
  27.    *cur='\0';
  28.    return [super init];
  29.    }
  30.  
  31. - free
  32.    {
  33.    free(data);
  34.    return [super free];
  35.    }
  36.  
  37. - grow
  38.    {
  39.    int pos=cur-data;
  40.    data=realloc(data,malloc_size(data)*2);
  41.    cur=data+pos;   
  42.    return self;
  43.    }
  44.  
  45. - (char *)string
  46.    {
  47.    return data;
  48.    }
  49.  
  50. - (int)length
  51.    {
  52.    return cur-data;
  53.    }
  54.  
  55. - empty
  56.    {
  57.    cur=data;
  58.    *cur='\0';
  59.    return self;
  60.    }
  61.  
  62. - (int)appendChar:(char)c
  63.    {
  64.    while (cur+1>=data+malloc_size(data)) [self grow];
  65.    *cur++=c;
  66.    *cur='\0';
  67.    return cur-data;
  68.    }
  69.  
  70. - (int)appendString:(const char *)str
  71.    {
  72.    return [self appendString:str length:strlen(str)];
  73.    }
  74.  
  75. - (int)appendString:(const char *)str length:(int)len
  76.    {
  77.    while (cur+len>=data+malloc_size(data)) [self grow];
  78.    while(len>0) { *cur++=*str++; len--; }
  79.    *cur='\0';
  80.    return cur-data;
  81.    }
  82.  
  83. - (int)appendStream:(NXStream *)s
  84.    {
  85.    int c;
  86.    
  87.    while ((c=NXRead(s,cur,data+malloc_size(data)-cur))>0)
  88.       {
  89.       cur+=c;
  90.       if (cur>=data+malloc_size(data)) [self grow];
  91.       }
  92.    
  93.    *cur='\0';
  94.    return cur-data;
  95.    }
  96.  
  97. - (int)appendFile:(int)fd
  98.    {
  99.    int c;
  100.    
  101.    while ((c=read(fd,cur,data+malloc_size(data)-cur))>0)
  102.       {
  103.       cur+=c;
  104.       if (cur>=data+malloc_size(data)) [self grow];
  105.       }
  106.    
  107.    *cur='\0';
  108.    return cur-data;
  109.    }
  110.  
  111. - (int)appendSimpleString:(id)sstr
  112.    {
  113.    char *d=[sstr string];
  114.    int l=[sstr length];
  115.  
  116.    return [self appendString:d length:l];
  117.    }
  118.  
  119. - (int)includeSimpleString:(id)sstr
  120.    {
  121.    int ret;
  122.    ret=[self appendSimpleString:sstr];
  123.    [sstr free];
  124.    return ret;
  125.    }
  126.  
  127. - (int)lastChar
  128.    {
  129.    return (cur>data) ? *(cur-1) : -1;
  130.    }
  131. @end
  132.